home *** CD-ROM | disk | FTP | other *** search
- package com.glenpike.search
- {
- import com.glenpike.loader.TextLoader;
- import events.SearchEvent;
- import flash.events.ErrorEvent;
- import flash.events.Event;
- import flash.events.EventDispatcher;
-
- public class TextFileSearcher extends EventDispatcher
- {
- private var _cancelled:Boolean = false;
-
- private var _searchTerm:String;
-
- private var _ignoredWords:Array;
-
- private var _txtLoader:TextLoader;
-
- private var _currFile:int;
-
- private var _ignoredWordsFile:String = "data/ignored-words.txt";
-
- private var _results:Array;
-
- private var _files:Array;
-
- public function TextFileSearcher()
- {
- _cancelled = false;
- _ignoredWordsFile = "data/ignored-words.txt";
- super();
- _init();
- }
-
- private function _searchFor(param1:String) : void
- {
- var _loc2_:RegExp = null;
- var _loc3_:Object = null;
- var _loc4_:Array = null;
- var _loc5_:Array = null;
- var _loc6_:int = 0;
- var _loc7_:int = 0;
- var _loc8_:int = 0;
- var _loc9_:Object = null;
- _loc2_ = new RegExp(param1,"gi");
- _results[_currFile] = new Object();
- _results[_currFile].file = _files[_currFile];
- _loc3_ = _loc2_.exec(_txtLoader.text);
- if(null == _loc3_)
- {
- _results[_currFile].indexes = null;
- return;
- }
- _loc4_ = new Array();
- _loc5_ = pageIndexes();
- _loc6_ = 0;
- _loc7_ = int(_loc5_[_loc6_]);
- do
- {
- _loc3_.count = 1;
- while(_loc7_ < _loc3_.index)
- {
- _loc6_++;
- _loc7_ = int(_loc5_[_loc6_]);
- }
- _loc3_.page = _loc6_;
- if(null != _loc9_)
- {
- if(_loc3_.page == _loc9_.page)
- {
- _loc3_ = _loc4_.pop();
- ++_loc3_.count;
- }
- }
- else
- {
- _loc8_ = _loc6_;
- }
- _loc4_.push(_loc3_);
- _loc9_ = _loc3_;
- }
- while(null != (_loc3_ = _loc2_.exec(_txtLoader.text)));
-
- _results[_currFile].indexes = _loc4_;
- _results[_currFile].numPages = _loc5_.length;
- }
-
- public function cancel() : void
- {
- _cancelled = true;
- }
-
- private function _isIgnoredWord(param1:String) : Boolean
- {
- var _loc2_:Number = NaN;
- trace("_isIgnoredWord ? " + param1);
- if(null == _ignoredWords)
- {
- trace("no ignored words??!?!?!");
- return false;
- }
- _loc2_ = _ignoredWords.length - 1;
- while(_loc2_ >= 0)
- {
- trace(" - " + _ignoredWords[_loc2_]);
- if(param1 == _ignoredWords[_loc2_])
- {
- return true;
- }
- _loc2_--;
- }
- return false;
- }
-
- public function searchFor(param1:String, param2:Array) : Boolean
- {
- if(true == _invalidSearch(param1) || null == param2)
- {
- return false;
- }
- _searchTerm = param1;
- _results = new Array();
- _files = param2;
- _currFile = 0;
- _cancelled = false;
- _txtLoader.addEventListener(Event.COMPLETE,_fileLoaded);
- _txtLoader.addEventListener(ErrorEvent.ERROR,_fileLoaded);
- dispatchEvent(new SearchEvent(SearchEvent.FILE_START,_files[_currFile]));
- _txtLoader.loadFile(_files[_currFile]);
- return true;
- }
-
- private function _invalidSearch(param1:String) : Boolean
- {
- var _loc2_:Array = null;
- var _loc3_:int = 0;
- trace("_invalidSearch ? " + param1);
- if(null == param1)
- {
- return true;
- }
- _loc2_ = param1.split(" ");
- if(null == _loc2_)
- {
- trace("string split returned null???");
- return true;
- }
- trace("check Ignored Words");
- _loc3_ = int(_loc2_.length - 1);
- while(_loc3_ >= 0)
- {
- if(false == _isIgnoredWord(_loc2_[_loc3_]))
- {
- return false;
- }
- _loc3_--;
- }
- return true;
- }
-
- private function getSurroundingText(param1:String, param2:int) : *
- {
- var _loc3_:int = 0;
- var _loc4_:int = 0;
- var _loc5_:int = 0;
- var _loc6_:int = 0;
- var _loc7_:* = undefined;
- var _loc8_:* = undefined;
- var _loc9_:RegExp = null;
- var _loc10_:String = null;
- _loc3_ = 26 - param1.length;
- if(0 >= _loc3_)
- {
- return param1;
- }
- _loc4_ = Math.floor(_loc3_ / 2);
- _loc5_ = param2 - _loc4_;
- _loc6_ = param2 + _loc4_;
- if(0 > _loc5_)
- {
- _loc5_ = 0;
- }
- if(_loc6_ > _txtLoader.text.length)
- {
- _loc6_ = _txtLoader.text.length;
- }
- _loc7_ = _txtLoader.text.indexOf(" ",_loc5_);
- if(-1 != _loc7_ && param2 > _loc7_ + 1)
- {
- _loc5_ = _loc7_ + 1;
- }
- _loc8_ = _txtLoader.text.lastIndexOf(" ",_loc6_);
- if(-1 != _loc8_ && _loc6_ > _loc8_)
- {
- _loc6_ = _loc8_;
- }
- _loc9_ = /[\r\t\n]/gi;
- return _txtLoader.text.substring(_loc5_,_loc6_).replace(_loc9_,"");
- }
-
- private function _fileLoaded(param1:Event) : void
- {
- if(_cancelled)
- {
- dispatchEvent(new SearchEvent(SearchEvent.CANCELLED,null));
- _txtLoader.removeEventListener(Event.COMPLETE,_fileLoaded);
- _files = null;
- _results = null;
- return;
- }
- if(param1 instanceof ErrorEvent)
- {
- trace("error loading text " + ErrorEvent(param1).text);
- }
- else
- {
- trace("file loaded " + _files[_currFile]);
- _searchFor(_searchTerm);
- dispatchEvent(new SearchEvent(SearchEvent.FILE_COMPLETE,_files[_currFile]));
- }
- ++_currFile;
- if(_currFile < _files.length)
- {
- dispatchEvent(new SearchEvent(SearchEvent.FILE_START,_files[_currFile]));
- _txtLoader.loadFile(_files[_currFile]);
- }
- else
- {
- _txtLoader.removeEventListener(Event.COMPLETE,_fileLoaded);
- dispatchEvent(new Event(Event.COMPLETE));
- }
- }
-
- private function _ignoredWordsLoaded(param1:Event) : void
- {
- _txtLoader.removeEventListener(Event.COMPLETE,_ignoredWordsLoaded);
- _ignoredWords = _txtLoader.text.split(",");
- trace("loaded ignored words " + _ignoredWords.length);
- }
-
- private function _init() : void
- {
- _txtLoader = new TextLoader();
- _txtLoader.addEventListener(Event.COMPLETE,_ignoredWordsLoaded);
- _txtLoader.loadFile(_ignoredWordsFile);
- }
-
- private function pageIndexes() : Array
- {
- var _loc1_:RegExp = null;
- var _loc2_:Object = null;
- var _loc3_:Array = null;
- _loc1_ = /\f/gi;
- _loc3_ = new Array();
- while(null != (_loc2_ = _loc1_.exec(_txtLoader.text)))
- {
- _loc3_.push(_loc2_.index);
- }
- return _loc3_;
- }
-
- public function get results() : Array
- {
- return _results;
- }
- }
- }
-
-